const http = require('http');
const qs = require('querystring');

const items = [];

const server = http.createServer(function (req, res) {
  if (req.url == '/') {
    switch (req.method) {
      case 'GET':
        show(res);
        break;
      case 'POST':
        add(req, res);
        break;
      default:
        badRequest(res);
        break;
    }
  } else {
    notFound(res);
  }
});
server.listen(3000, function () {
  console.log('http://localhost:3000');
});

function show(res) {
  const html = `
<html>
<head>
<title>Todo List</title>
</head>
<body>
  <h1>Todo List</h1>
  <ul>
    ${items
      .map(function (item) {
        return '<li>' + item + '</li>';
      })
      .join('')}
  </ul>
  <form method="post" action="/">
    <p>
      <input type="text" name="item" >
    </p>
    <p>
      <input type="submit" value="Add item" >
    </p>
  </form>
</body>
</html>
`;
  res.setHeader('Content-Type', 'text/html');
  res.setHeader('Content-Length', Buffer.byteLength(html));
  res.end(html);
}

function add(req, res) {
  let body = '';
  req.setEncoding('utf8');
  req.on('data', function (chunk) {
    body += chunk;
  });
  req.on('end', function () {
    const obj = qs.parse(body);
    items.push(obj.item);
    show(res);
  });
}

function notFound(res) {
  res.statucCode = 404;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Not Found');
}

function badRequest(res) {
  res.statucCode = 400;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Bad Request');
}
